package com.cskaoyan.javase.oop1._13pop;

/**
 * @description: 面向对象和面向过程的区别
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 面向对象和面向过程,都可以是语言的特性,也可以是编程的思想
 * 如果从语言的特性角度考虑,面向对象指的是封装继承多态等面向对象的程序特点,显然c语言是不具备面向对象的特性的
 *      而Java是具有面向对象特性的语言(Java是具有面向过程的语言特性)
 * 如果从编程的思想角度去考虑,面向对象指的是封装得到一个"类",然后通过继承复用类,
 *      最终达到复用代码提高程序的扩展性和可维护性,从思想的角度考虑即便没有面向对象特性的语言也是可以用面向对象思想来编程的(比如C语言,也可以写出具有面向对象思想的程序)
 *      同样,java虽然是具有面向对象特性的语言,依然可以写出具有面向过程思想的代码
 *
 *
 *
 * 用面向过程的思想来实现把大象放进冰箱
 * 怎么做?
 * 面向过程看重的是过程,是方法,是动作:
 *      1.打开冰箱门
 *      2.把大象放进冰箱
 *      3.关上冰箱门
 *
 * 面向过程思想编写程序的优缺点:
 * 优点:
 *      1.简单直接,只需要考虑实现功能的步骤,然后按照流程编写程序即可
 *      2.和具有面向对象特性的语言编写的面向对象程序比较,无需创建对象,它的效率往往会更高
 * 缺点:
 *      1.虽然简单直接,但是如果程序的功能需求比较复杂,或者容易更改需求,对于面向过程思想的程序往往是牵一发而动全身,
 *          任何小小的修改,可能都需要对整个系统做完全的修改,程序的扩展性和可维护性很差(致命缺点)
 *      2.面向过程思想的程序对程序员要求很高,要求程序员必须熟悉流程的每个步骤,不利于分工协作,合作开发一个大型系统
 *
 * 综上: 面向过程思想编写的程序,可维护性差,但是在需求比较简但,代码量不大的时候,它的效率更高
 *      什么时候用面向过程思想编写程序?
 *      简单的需求或者要求空间占用很小的时候(算法,单片机,嵌入式编程)等,不适用于大型的企业级开发
 *
 */
public class Demo {
    public static void main(String[] args) {
        //面向过程思想的程序就是一系列方法的调用,即可实现功能
        openFridgeDoor();
        elephantInto();
        closedFridgeDoor();
    }

    public static void openFridgeDoor() {
        System.out.println("我开门了,大象快进来!");
    }

    public static void elephantInto() {
        System.out.println("大象进入冰箱,快把门关上!");
    }
    public static void closedFridgeDoor(){
        System.out.println("门关上,大象进入了冰箱!");
    }
}
